import pandas as pd

# 1. 读文件
df = pd.read_excel(r"H:\pycharmproject\5\data\渠道流量体裁9.xlsx")

# 2. 基本检查
print(f"行数: {len(df)}")
print(f"列名: {list(df.columns)}")
print(df.head(3))

if len(df) == 0:
    print("无数据！")
    exit()

# 确保成交金额是数字（如果有"万"，转换；调整如果不同）
if '成交金额' in df.columns:
    if df['成交金额'].dtype == 'object':
        df['成交金额'] = df['成交金额'].str.replace('万', '').astype(float)  # 如"387.1万" → 387.1

# 检查关键列是否存在（如果列名不同，改这里）
if 'qudao' not in df.columns or 'liuliangqudao' not in df.columns or '成交金额' not in df.columns:
    print("列名不匹配！检查并改列名（如用 df.rename）。")
    exit()

# 3. 每个qudao -> 每个liuliangqudao -> 按成交降序取前5
result = []
for qudao, qudao_group in df.groupby('qudao'):
    print(f"\n处理渠道: {qudao} (共{len(qudao_group)}行)")
    for flow, flow_group in qudao_group.groupby('liuliangqudao'):
        if len(flow_group) > 0:  # 跳过空组
            # 按成交降序，取前5
            top5 = flow_group.sort_values('成交金额', ascending=False).head(5).copy()
            if not top5.empty:
                # 计算该liuliangqudao内的占比（占该渠道该来源的总金额）
                flow_total = top5['成交金额'].sum()
                top5['占比'] = (top5['成交金额'] / flow_total * 100).round(2)
                result.append(top5)
                print(f"  流量来源'{flow}': 取前{len(top5)}条，总金额{flow_total:.2f}")

# 4. 如果无结果，退出
if not result:
    print("处理无数据！所有组为空。")
    exit()

# 5. 合并所有top5
top_df = pd.concat(result, ignore_index=True)

# 6. 输出关键列
output = top_df[['qudao', 'liuliangqudao', '成交金额', '占比']]
print(f"\n总结果行数: {len(output)}")
print(output.head(10))  # 预览前10行

# 7. 保存
output.to_excel(r"H:\pycharmproject\5\data\每个渠道每个来源前5结果.xlsx", index=False)
print("保存完成！")
